When developing software applications the developer is generally required to test the application to verify that it performs its intended function. This is true for any programming language, for example for programming in assembler, C++, Java, or for programmable platforms such as business process model (BPM) applications. Typically each type of programming application may be provided with debugging tools or a debugging application to aid the programmer in verifying correctness of the application and/or locating errors.
Generally, a debugger allows the user to select breakpoints at which prosecution will halt and the user can view the contents of selected memory locations and/or variables used in the program, so that the user can determine if the program is functioning as planned. Typically, each type of programming language or programmable platform uses different debugging tools that are adapted to function with the respective language and handle the specific processes supported by the language.
In some programming platforms such as business process models (BPM), there exists a programming environment that combines processes that may be prepared by multiple languages, wherein each language specializes in the problem being dealt with. As an example the programming aspects may include control flow, data flow, message flow and other aspects, each being supported by different programming tools. Likewise, a business process may be made up from many distinct procedures, such as workflow graphs, data entry, mapping definitions, custom user code snippets, web service endpoint URL's and the like. The various elements are programmed using different programming tools, for example BPMN, XSLT, Java, XML/SOAP. Each element may use different runtime stacks (e.g. BPEL engines, XSLT processors, JEE servers, Web service stacks etc.).
When programming the various parts of a business process the user needs to use multiple debugging tools, each dealing with a specific part of the business process. This inhibits the transfer of parameters from one debug unit to another and prevents setting conditional breakpoints in one process based on the execution of a different process. As a result is impossible to jointly debug or analyze multiple correlated processes, or lifecycle stages of a business process in a single debugging experience. Instead complex programs in a programming environment need to be debugged piece by piece. An interrelated process cannot be debugged as a single unit with other processes, for example debugging process logs, or message flow through underlying technologies such as web service connectivity. Additionally, debugging piece by piece is also wasteful in consuming the environment stack and other resources of the programming environment, since each debugger requires its own memory allocation.